package state;

/**
 * 每个状态都有笑和哭根据状态不同自己去实现自己的内容
 * 每种状态都自己去实现该状态下自己对应的方法。
 * 例子TCP的connection
 * Tcp里面有open close
 * 不同的状态下的
 * open close都不同
 * 状态有 TCPListen TCPCLOSE
 *
 * MMState 里面的动作不扩展了考虑用这个模式
 * 这个是建立在state的扩展上来说的这个扩展多可以多用。
 *
 * state 有限状态机
 * 状态的迁移和变化
 *
 * 线程的状态
 * new ready running 结束 阻塞 timewaiting waiting block(block不消耗cpu waiting消耗) 状态和状态剋有相互move的（状态迁移需要研究）
 */
abstract class MMState{
    abstract void laugh();
    abstract void cry();
}

/**
 * 开心
 */
class Happy extends MMState{

    @Override
    void laugh() {
        System.out.println("开心-笑");
    }

    @Override
    void cry() {
        System.out.println("开心-哭");
    }
}

/**
 * 悲伤
 */
class Sadness extends MMState{

    @Override
    void laugh() {
        System.out.println("悲伤-笑");
    }

    @Override
    void cry() {
        System.out.println("悲伤-哭");
    }
}

public class State {
    public static void main(String[] args) {
        System.out.println("state");

        MMState mmState = new Happy();
        mmState.cry();
        mmState.laugh();

        mmState = new Sadness();
        mmState.laugh();
        mmState.cry();
    }
}
